package com.AdvancedDemos.枚举;

enum Gender {
    BOY, GIRL, 男, 女;//其实就是4个常量,存的是Gender类型唯4的实例,类外无法新建对象
}

public class 枚举应用Demo {
    public static void main(String[] args) {
        //V1使用整型值 0 1 来传递信息,不明确,容易记错
        printGender_V1(0);
        printGender_V1(1);

        //V2使用整型常量来传递信息,较V1清晰,但无法限制输入值只能是两个中的一个,别人可能给出其他任意整数,还需要额外处理异常情况
        System.out.println("-------------------");
        printGender_V2(Constant.BOY);
        printGender_V2(Constant.GIRL);

        //V3使用枚举类型对象来传递信息,较V2限制了输入值只能是枚举类中给出的有限的几个常量,无需担心非法输入,且见名知义,清晰易懂
        System.out.println("-------------------");
        printGender_V3(Gender.BOY);
        printGender_V3(Gender.男);
        printGender_V3(Gender.GIRL);
        printGender_V3(Gender.女);

    }

    public static void printGender_V1(int gender) {
        switch (gender) {
            case 0:
                System.out.println("I am a boy");
                break;
            case 1:
                System.out.println("I am a girl");
                break;
        }
    }


    public static void printGender_V2(int gender) {
        switch (gender) {
            case Constant.BOY:
                System.out.println("I am a boy");
                break;
            case Constant.GIRL:
                System.out.println("I am a girl");
                break;
        }
    }


    public static void printGender_V3(Gender gender) {
        switch (gender) {
            case 男:
            case BOY://switch case 中无需 Gender.BOY Gender.GIRL
                System.out.println("I am a boy");
                break;
            case 女:
            case GIRL:
                System.out.println("I am a girl");
                break;
        }
    }
}

class Constant {
    public static final int BOY = 0;
    public static final int GIRL = 1;
}
